package com.fau.template.controller;

import javax.servlet.http.HttpSession;

import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.crypto.hash.Md5Hash;
import org.apache.shiro.subject.Subject;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.fau.template.entity.NmAdmin;

/**
 * @desc 登录controller
 * @author liy
 * @datetime 2015年1月11日,下午2:57:52
 */
@Controller
public class LoginController extends SpringController {
	
	/**
	 * @desc 打开登录页面
	 * @return String
	 * @author liy
	 * @datetime 2015年1月13日,下午12:02:49
	 */
	@RequestMapping(value = "/login", method = RequestMethod.GET)
	public String login() {
		return "login";
	}

	/**
	 *
	 * @desc 登录
	 * @return String
	 * @author liy
	 * @datetime 2015年5月15日,下午11:19:01
	 */
	@RequestMapping(value = "/login", method = RequestMethod.POST)
	public String login(NmAdmin admin, HttpSession session) {
		Subject subject = SecurityUtils.getSubject();
		
			// 获得session中的验证码
			String captcha = (String) session.getAttribute(com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY);
			if(StringUtils.isBlank(admin.getCaptcha())){
				// 验证码为空
				return "redirect:/login/" + "captchaEmpty";
			} else {
				if(admin.getCaptcha().equalsIgnoreCase(captcha)){
					try {
						Md5Hash md5Hash = new Md5Hash(admin.getPassword(), admin.getUsername());
						subject.login(new UsernamePasswordToken(admin.getUsername(),md5Hash.toHex()));
						return "redirect:/index";
					} catch(AuthenticationException e) {
						// 用户名或密码错误
						return "redirect:/login/" + "loginError";
					}
				} else {
					return "redirect:/login/" + "captchaError";
				}
			}
		
	}

	/**
	 * @desc 登出
	 * @return String
	 * @author liy
	 * @datetime 2015年5月15日,下午11:36:49
	 */
	@RequestMapping(value = "/logout", method = RequestMethod.GET)
	public String loginOut() {
		SecurityUtils.getSubject().logout();
		return"redirect:/login";
	}

	/**
	 * @desc 打开登录页面并提示错误信息
	 * @return String
	 * @author liy
	 * @datetime 2015年5月9日,下午1:10:59
	 */
	@RequestMapping(value = "/login/{error}", method = RequestMethod.GET)
	public String loginError(Model model,@PathVariable("error")String error) {
		model.addAttribute("error", error);
		return "login";
	}
	
	/**
	 * @desc 打开主页
	 * @return String
	 * @author liy
	 * @datetime 2015年1月13日,下午12:03:07
	 */
	@RequestMapping(value = "/index", method = RequestMethod.GET)
	public String index() {
		return "index";
	}
	
	/**
	 * @desc Session超时
	 * @return String
	 * @author dangjh
	 * @datetime 2015年5月3日,下午10:04:54
	 */
	@RequestMapping(value = "/timeout", method = RequestMethod.GET)
	public String timeout() {
		return "timeout";
	}
	
}
